package com.zjl.学习.第03章_步骤Shop.D_步骤监听器;

import com.zjl.springbatch.util.OutColour;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.StepExecutionListener;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.stereotype.Component;

/**
 * ClassName: MyStepExecutionListener
 * Package: com.zjl.学习.第03章_步骤Shop.D_步骤监听器
 * Description:
 *
 * @Author 张蛟龙
 * @Create 2024/8/2 22:01
 * @Version 1.0
 */
@Component//放入 bean
public class MyStepExecutionListener implements StepExecutionListener {

    @Override
    public void beforeStep(StepExecution stepExecution) {
        long begin = System.currentTimeMillis();
        OutColour.out.printlnRed("**********************【接口步骤执行侦听器 开始时间】" + begin + "************************");
        ExecutionContext executionContext = stepExecution.getExecutionContext();
        //获取执行的当前时间
        executionContext.putLong("StepBegin", System.currentTimeMillis());

    }

    /**
     * ExitStatus.UNKNOWN //未知，不知道的状态
     * ExitStatus.EXECUTING //执行
     * 表示处理时的连续状态仍在发生，因此不需要采取进一步行动。
     * 用于异步执行场景，其中处理发生在另一个线程或进程，调用者不需要等待结果
     * ExitStatus.COMPLETED //已完成的加工
     * ExitStatus.NOOP //表示没有处理的作业
     * ExitStatus.FAILED  //有误差的已完成处理。
     * ExitStatus.STOPPED  //表示已完成的加工 中断状态停止
     */
    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        long end = System.currentTimeMillis();
        ExecutionContext executionContext = stepExecution.getExecutionContext();
        long begin = executionContext.getLong("StepBegin");

        OutColour.out.printlnRed("**********************【接口步骤执行侦听器 开始时间】" + end + "************************");
        OutColour.out.printlnRed("**********************【整个步骤时间 总耗时间】" + (end - begin) + "************************");
        if (true) {

            return ExitStatus.STOPPED;//失败ExitStatus.FAILED
        }
        return stepExecution.getExitStatus();
    }
}
